package jedis.demo;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;

public class JedisApI {
    private static JedisPool jedisPool; 
    static {
        JedisPoolConfig config=new JedisPoolConfig();
        config.setMaxTotal(50); // 最大连接数默认为8
        config.setMaxIdle(10); // 最大空闲连接默认为8
        config.setMinIdle(7); // 最小空闲连接默认为0
        config.setMaxWaitMillis(1000); // 获取资源等待时间
        config.setTestOnBorrow(true); // 获取资源时是否验证资源的有效性

        // 创建Jedis连接池
        jedisPool=new JedisPool(config,"127.0.0.1",6379,10000,null,0);
    }
    public void destroy() {
        if(!(jedisPool==null||jedisPool.isClosed())){
            jedisPool.close(); // 关闭连接池
        }
    }

    /**
     *
     * 设置键-值 (有效时间无限)
     *
     * @param key
     * @param value
     * @return
     */
    public boolean set(String key, String value){
        Jedis jedis=null;
        try {
            jedis=jedisPool.getResource();
            jedis.set(key,value);
            return true;
        }catch (Exception e){
            e.printStackTrace();
            return false;
        }finally {
            // 返还到连接池
            if(jedis!=null){
                jedis.close();
            }
        }
    }

    /**
     *
     * 设置键-值 设置有效时间
     *
     * @param key 键
     * @param seconds 有效时间（秒）
     * @param value 值
     * @return
     */
    public boolean set(String key,int seconds,String value){
        Jedis jedis=null;
        try {
            jedis=jedisPool.getResource();
            jedis.setex(key,seconds,value);
            return true;
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            // 返还到连接池
            if(jedis!=null){
                jedis.close();
            }
        }
        return false;
    }

    /**
     * 判断某个key是否存在
     *
     * @param key
     * @return
     */
    public boolean exist(String key){
        Jedis jedis=null;

        try {
            jedis=jedisPool.getResource();
            return jedis.exists(key);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            // 返还到连接池
            if(jedis!=null){
                jedis.close();
            }
        }
        return false;
    }

    /**
     * 获取数据
     * @param key
     * @return
     */
    public String get(String key){
        String value=null;
        Jedis jedis=null;
        try {
            jedis=jedisPool.getResource();
            value=jedis.get(key);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            // 返还到连接池
            if(jedis!=null){
                jedis.close();
            }
        }
        return value;
    }

    /**
     * 查询key值的有效期，当key不存在时返回-2，当key没有设置有效期时，返回-1，否则，以秒为单位，返回key
     *
     * @param key
     * @return
     */
    public Long ttl(String key){
        Jedis jedis=null;

        try {
            jedis=jedisPool.getResource();

            return jedis.ttl(key);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            // 返还到连接池
            if(jedis!=null){
                jedis.close();
            }
        }
        return (long) -2;
    }

    /**
     * 删除键
     * @param key
     */
    public void delete(String key){
        Jedis jedis=null;

        try {
            jedis=jedisPool.getResource();
            jedis.del(key);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            // 返还到连接池
            if(jedis!=null)
                jedis.close();
        }
    }
}
